//============================================================================
// Name        : Pruebas.cpp
// Author      : ESM
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <fstream>
#include "ArchivoDeBloques.h"
#include <cstring>
#include <iterator>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

void escribirMucho() {
	ArchivoDeBloques archivo("Archivo", 25);

	Registro reg1("UNO");
	Registro reg2("DOS");
	Registro reg3("TRES");
	Registro reg4("CUATRO");
	Registro reg5("CINCO");
	Registro reg6("SEIS");
	Registro reg7("SIETE");
	Registro reg8("OCHO");
	Registro reg9("NUEVE");
	Registro reg10("DIEZ");
	Registro reg11("ONCE");
	Registro reg12("NO COMPILA");

	Registro reg99("ALGOMUYLARGOPARAQUENOENTRE");

	Bloque bloque1(25);

	bloque1.agregarRegistro(reg1);
	bloque1.agregarRegistro(reg2);
	bloque1.agregarRegistro(reg3);
	bloque1.agregarRegistro(reg4);
	bloque1.agregarRegistro(reg99);

	Bloque bloque2(25);

	bloque2.agregarRegistro(reg5);
	bloque2.agregarRegistro(reg6);
	bloque2.agregarRegistro(reg7);
	bloque2.agregarRegistro(reg99);

	Bloque bloque3(25);

	bloque3.agregarRegistro(reg8);
	bloque3.agregarRegistro(reg9);
	bloque3.agregarRegistro(reg10);

	Bloque bloque4(25);
	bloque4.agregarRegistro(reg11);
	bloque4.agregarRegistro(reg11);
	bloque4.agregarRegistro(reg11);

	Bloque bloque5(25);
	bloque5.agregarRegistro(reg11);

	Bloque bloque6(25);
	bloque6.agregarRegistro(reg12);


	archivo.escribirBloque(bloque1,0);
	archivo.escribirBloque(bloque2,2);
	archivo.escribirBloque(bloque3,4);
	archivo.escribirBloque(bloque1,6);
	archivo.escribirBloque(bloque2,8);
	archivo.escribirBloque(bloque4,11);
	archivo.escribirBloque(bloque5,12);
	archivo.escribirBloque(bloque6,13);

	Bloque* bloqueLeido;
	for (int i=0; i<14;i++){
		bloqueLeido = archivo.leerBloque(i);
		cout << "Bloque "<< i << ": " <<(*bloqueLeido).bufferBloque << endl;
	}


	bloqueLeido = archivo.leerBloque(12);
	bloqueLeido->agregarRegistro(reg1);
	bloqueLeido->agregarRegistro(reg2);
	archivo.escribirBloque((*bloqueLeido),12);
	archivo.escribirBloque((*bloqueLeido),1);


	for (int i=0; i<14;i++){
			bloqueLeido = archivo.leerBloque(i);
			cout << "Bloque "<< i << ": " <<(*bloqueLeido).bufferBloque << endl;
		}

}


void escribirYLeerBloqueTestVer() {

    ArchivoDeBloques archivo("Archivo", 30);

    Registro reg1("UNO");
    Registro reg2("DOS");
    Registro reg3("TRES");
    Registro reg4("CUATRO");
    Registro reg5("5");
    Registro reg6("6");

    Bloque bloque1(20);

    bloque1.agregarRegistro(reg1);
    bloque1.agregarRegistro(reg2);

    archivo.escribirBloque(bloque1,0);

    Bloque bloque2(20);
    bloque2.agregarRegistro(reg3);
    bloque2.agregarRegistro(reg4);
    archivo.escribirBloque(bloque2,1);

    cout<<"leer bloque"<<endl;
    Bloque* bloqueLeido = archivo.leerBloque(0);
    cout << (*bloqueLeido).bufferBloque << endl;
    bloqueLeido = archivo.leerBloque(1);
    cout << (*bloqueLeido).bufferBloque << endl;
//tendria que volver a escribir lo mismo que arriba pq solo escribi el mismo bloque
    cout<<"leer bloque despues de escribirlo"<<endl;
    archivo.escribirBloque(bloque1,1);
    bloqueLeido = archivo.leerBloque(1);
    cout << (*bloqueLeido).bufferBloque << endl;
    archivo.escribirBloque(bloque2,0);
    bloqueLeido = archivo.leerBloque(0);
    cout << (*bloqueLeido).bufferBloque << endl;

    bloque2.agregarRegistro(reg5);
    bloque2.agregarRegistro(reg6);
    archivo.escribirBloque(bloque2,0);
    bloqueLeido = archivo.leerBloque(0);
    cout << (*bloqueLeido).bufferBloque << endl;
}


int main() {

	cout << "Ingresa a Main" << endl;

	//escribirYLeerBloqueTestVer();

	escribirMucho();
	cout << "Sale de Main" << endl;
}